///////////////////////////////////////////////////////////////////////////////
// Classe de manipulation de fichier d'animeshell
// Rémy Guillemette <shaikadzari@gmail.com>
///////////////////////////////////////////////////////////////////////////////
//
// 
///////////////////////////////////////////////////////////////////////////////
using Gtk;
using System;
using System.IO;

namespace animeshell
{
	
	public class ManipFichier
	{
				
		///////////////////////////////////////////////////////////////////////////////
		// Constructeur
		///////////////////////////////////////////////////////////////////////////////
		public ManipFichier()
		{
			
		}
		
		///////////////////////////////////////////////////////////////////////////////
		// Fonction d'ajout d'une entrée dans le fichier de animeshell
		///////////////////////////////////////////////////////////////////////////////
		static public string AjoutEntre(ref string m_Conf, ref string m_Confsave, int ID, string Nom, string Dvd)
		{
			// Variables nécessaires
			StreamWriter sw = null;
			string Retour = null;
			
			// Écriture des données
			try
			{
				// Copy existing file
				File.Copy(m_Conf, m_Confsave, true);
				
				// writing				
				sw = File.AppendText(m_Conf);
				sw.WriteLine(ID);
				sw.WriteLine(Nom);
				sw.WriteLine(Dvd);
				
			}
			catch(Exception EX)
			{
				Retour = EX.ToString();
			}
			finally
			{
				if (sw != null)
					sw.Close();
			}
			return Retour;
				
		}
		
		///////////////////////////////////////////////////////////////////////////////
		// Fonction d'ajout d'une image dans le dossier de animeshell
		///////////////////////////////////////////////////////////////////////////////
		static public string AjoutImage(ref string Image, ref string m_Dossier, int ID)
		{
			// Variable for return
			string Ret = null;
			
			try
			{
				File.Copy(Image, m_Dossier+ID+(System.IO.Path.GetExtension(Image)));
			}
			catch(Exception EX)
			{
				Ret = EX.ToString();
			}
			
			return Ret;
		}
		
		///////////////////////////////////////////////////////////////////////////////
		// Fonction de recherche de l'ID
		///////////////////////////////////////////////////////////////////////////////
		static public int ChercheID(ref string Conf)
		{
			StreamReader sr = null;
			int NoLigne = 0;
			string BufferLigne = null;
			string Ligne = null;;
			
			try
			{
				sr = new StreamReader(Conf);
				while ((BufferLigne = sr.ReadLine()) != null)
				{
					Ligne = BufferLigne;
					BufferLigne = sr.ReadLine();
					BufferLigne = sr.ReadLine();
				}
			}
			catch
			{
				NoLigne = -1;
			}
			
			if (NoLigne != -1)
			{
				NoLigne = Convert.ToInt32(Ligne);
				NoLigne++;
			}
			if (sr != null)
				sr.Close();
			
			return NoLigne;
				
		}
		
		///////////////////////////////////////////////////////////////////////////////
		// Erasing function
		///////////////////////////////////////////////////////////////////////////////
		static public string SupprimerEntre(ref string Dossier, ref string Conf, ref string Confsave, ref int ID)
		{
			// Variable
			StreamReader sr = null;
			StreamWriter sw = null;
			string Line = null;
			string EraseID = null;
			string Ret = null;
			
			try
			{
				// Copy old file
				File.Copy(Conf, Confsave, true);
				
				// Set ID to erase
				EraseID = Convert.ToString(ID);
				
				// Open the two file to read and write
				sr = new StreamReader(Confsave);
				sw = new StreamWriter(Conf, false);
				
				// Read and write data
				while ((Line = sr.ReadLine()) != null)
				{
					if (Line == EraseID)
					{
						Line = sr.ReadLine();
						Line = sr.ReadLine();
					}
					else
					{
						sw.WriteLine(Line);
						sw.WriteLine(sr.ReadLine());
						sw.WriteLine(sr.ReadLine());
					}
				}
				
				// Call ManipFichier.SupprimerImage to erase image
				Ret = ManipFichier.SupprimerImage(Dossier, ID);
			}
			catch (Exception EX)
			{
				Ret = EX.ToString();
			}
			finally
			{
				if (sr != null)
					sr.Close();
				if (sw != null)
					sw.Close();
			}
			
			return Ret;
				           
				           
		}
		
		///////////////////////////////////////////////////////////////////////////////
		// Image erasing function
		///////////////////////////////////////////////////////////////////////////////
		static public string SupprimerImage(string Dossier, int ID)
		{
			string sImage = null;
			string Ret = null;
			
			// Searching image with ID
			if (File.Exists(Dossier+ID+".jpg"))
				sImage = ID+".jpg";
			else
			{
				if (File.Exists(Dossier+ID+".png"))
					sImage = ID+".png";
				else
				{
					if (File.Exists(Dossier+ID+".gif"))
						sImage = ID+".gif";
					else
						Ret = "No";
				}
			}
			
			// Deleting image
			if (Ret != "No")
			{
				try
				{
					File.Delete(Dossier+sImage);
				}
				catch (Exception EX)
				{
					Ret = EX.ToString();
				}
			}
			
			return Ret;
		}
	}
}
